home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / Auth / Container / SOAP.php < prev    next >
PHP Script  |  2004-03-24  |  6KB  |  171 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2002 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.02 of the PHP license,      |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Bruno Pedro <bpedro@co.sapo.pt>                             |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: SOAP.php,v 1.6 2003/09/08 11:24:05 yavo Exp $
  20. //
  21.  
  22. require_once "Auth/Container.php";
  23. require_once "PEAR.php";
  24. require_once 'SOAP/Client.php';
  25.  
  26. /**
  27.  * Storage driver for fetching login data from SOAP
  28.  *
  29.  * This class takes one parameter (options), where
  30.  * you specify the following fields: endpoint, namespace,
  31.  * method, encoding, usernamefield and passwordfield.
  32.  *
  33.  * You can use specify features of your SOAP service
  34.  * by providing its parameters in an associative manner by
  35.  * using the '_features' array through the options parameter.
  36.  *
  37.  * The 'matchpassword' option should be set to false if your
  38.  * webservice doesn't return (username,password) pairs, but
  39.  * instead returns error when the login is invalid.
  40.  *
  41.  * Example usage:
  42.  *
  43.  * <?php
  44.  *
  45.  * ...
  46.  *
  47.  * $options = array (
  48.  *             'endpoint' => 'http://your.soap.service/endpoint',
  49.  *             'namespace' => 'urn:/Your/Namespace',
  50.  *             'method' => 'get',
  51.  *             'encoding' => 'UTF-8',
  52.  *             'usernamefield' => 'login',
  53.  *             'passwordfield' => 'password',
  54.  *             'matchpasswords' => false,
  55.  *             '_features' => array (
  56.  *                             'example_feature' => 'example_value',
  57.  *                             'another_example'  => ''
  58.  *                             )
  59.  *             );
  60.  * $auth = new Auth('SOAP', $options, 'loginFunction');
  61.  * $auth->start();
  62.  *
  63.  * ...
  64.  *
  65.  * ?>
  66.  *
  67.  * @author   Bruno Pedro <bpedro@co.sapo.pt>
  68.  * @package  Auth
  69.  * @version  $Revision: 1.6 $
  70.  */
  71. class Auth_Container_SOAP extends Auth_Container
  72. {
  73.  
  74.     /**
  75.      * Required options for the class
  76.      * @var array
  77.      * @access private
  78.      */
  79.     var $_requiredOptions = array('endpoint', 'namespace', 'method', 'encoding', 'usernamefield', 'passwordfield');
  80.  
  81.     /**
  82.      * Options for the class
  83.      * @var array
  84.      * @access private
  85.      */
  86.     var $_options = array();
  87.  
  88.     /**
  89.      * Optional SOAP features
  90.      * @var array
  91.      * @access private
  92.      */
  93.     var $_features = array();
  94.  
  95.     /**
  96.      * The SOAP response
  97.      * @var array
  98.      * @access public
  99.      */
  100.      var $soapResponse = array();
  101.  
  102.     /**
  103.      * Constructor of the container class
  104.      *
  105.      * @param  $options, associative array with endpoint, namespace, method,
  106.      *                   usernamefield, passwordfield and optional features
  107.      */
  108.     function Auth_Container_SOAP($options)
  109.     {
  110.         $this->_options = $options;
  111.         if (!isset($this->_options['matchpasswords'])) {
  112.             $this->_options['matchpasswords'] = true;
  113.         }
  114.         if (!empty($this->_options['_features'])) {
  115.             $this->_features = $this->_options['_features'];
  116.             unset($this->_options['_features']);
  117.         }
  118.     }
  119.  
  120.     /**
  121.      * Fetch data from SOAP service
  122.      *
  123.      * Requests the SOAP service for the given username/password
  124.      * combination.
  125.      *
  126.      * @param  string Username
  127.      * @param  string Password
  128.      * @return mixed Returns the SOAP response or false if something went wrong
  129.      */
  130.     function fetchData($username, $password)
  131.     {
  132.         // check if all required options are set
  133.         if (array_intersect($this->_requiredOptions, array_keys($this->_options)) != $this->_requiredOptions) {
  134.             return false;
  135.         } else {
  136.             // create a SOAP client and set encoding
  137.             $soapClient = new SOAP_Client($this->_options['endpoint']);
  138.             $soapClient->setEncoding($this->_options['encoding']);
  139.         }
  140.         // assign username and password fields
  141.         $usernameField = new SOAP_Value($this->_options['usernamefield'],'string', $username);
  142.         $passwordField = new SOAP_Value($this->_options['passwordfield'],'string', $password);
  143.         $SOAPParams = array($usernameField, $passwordField);
  144.         // assign optional features
  145.         foreach ($this->_features as $fieldName => $fieldValue) {
  146.             $SOAPParams[] = new SOAP_Value($fieldName, 'string', $fieldValue);
  147.         }
  148.         // make SOAP call
  149.         $this->soapResponse = $soapClient->call(
  150.                                   $this->_options['method'],
  151.                                   $SOAPParams,
  152.                                   array('namespace' => $this->_options['namespace'])
  153.                                                );
  154.         if (!PEAR::isError($this->soapResponse)) {
  155.             if ($this->_options['matchpasswords']) {
  156.                 // check if passwords match
  157.                 if ($password == $this->soapResponse->{$this->_options['passwordfield']}) {
  158.                     return true;
  159.                 } else {
  160.                     return false;
  161.                 }
  162.             } else {
  163.                 return true;
  164.             }
  165.         } else {
  166.             return false;
  167.         }
  168.     }
  169. }
  170. ?>
  171.